#pragma once

class CHashTable
{
	struct HashElement
	{
		char * _key;
		void * _value;
		HashElement* _next;
		HashElement* _prvi;

		HashElement():_key(0),_value(0),_next(0),_prvi(0)
		{
		}
	};

	HashElement* m_pHashTable;
	unsigned int hash(const char *str);
	int			m_nTableSize;

	void deleteItem(HashElement* pElement);
public:
	CHashTable(int size = 200);
	~CHashTable(void);

	bool insert(const char * key,void* value);
	bool remove(const char * key);
	void * getValue(const char* key);

	bool insert(const WCHAR * key,void* value);
	bool remove(const WCHAR * key);
	void * getValue(const WCHAR* key);

	void clear();
};
